// Copyright Epic Games, Inc. All Rights Reserved.  // 版权声明，Epic Games公司保留所有权利

#pragma once  // 头文件保护宏，确保头文件只被编译一次

#include "GameFramework/Actor.h"  // 包含Actor基类的头文件
#include "GameplayTagAssetInterface.h"  // 包含GameplayTag资源接口的头文件
#include "GameplayTagContainer.h"  // 包含GameplayTag容器的头文件

#include "LyraTaggedActor.generated.h"  // 包含由Unreal Header Tool生成的代码头文件

// 一个实现了Gameplay Tag资源接口的Actor
UCLASS()  // Unreal宏，声明这是一个UClass类
class ALyraTaggedActor : public AActor, public IGameplayTagAssetInterface  // 定义ALyraTaggedActor类，继承自AActor和IGameplayTagAssetInterface
{
	GENERATED_BODY()  // Unreal宏，生成类的主体代码

public:

	ALyraTaggedActor(const FObjectInitializer& ObjectInitializer = FObjectInitializer::Get());  // 构造函数声明，接受一个FObjectInitializer参数

	//~IGameplayTagAssetInterface  // 接口实现部分开始注释
	virtual void GetOwnedGameplayTags(FGameplayTagContainer& TagContainer) const override;  // 重写接口函数，获取拥有的GameplayTags
	//~End of IGameplayTagAssetInterface  // 接口实现部分结束注释

	//~UObject interface  // UObject接口部分开始注释
#if WITH_EDITOR  // 条件编译，仅在编辑器模式下包含以下代码
	virtual bool CanEditChange(const FProperty* InProperty) const override;  // 重写函数，检查属性是否可编辑
#endif
	//~End of UObject interface  // UObject接口部分结束注释

protected:
	// 与此Actor关联的Gameplay相关标签
	UPROPERTY(EditAnywhere, BlueprintReadOnly, Category=Actor)  // Unreal属性宏，可在任意地方编辑，蓝图只读，分类为Actor
	FGameplayTagContainer StaticGameplayTags;  // GameplayTag容器成员变量，存储静态Gameplay标签
};